﻿#ifndef WRITE_SESSION_H
#define WRITE_SESSION_H

#include "session.h"

namespace TFTP {

/**
* @brief TFTP传输的类
*/
class WriteSession : public Session
{
public:
    virtual ~WriteSession();
    /**
    * @brief 解析数据包并确认它
    * @param dgram 要分析的数据报
    * @return 如果数据包被接受且未引发错误，则为false，否则为true
    * @note 如果parseData返回true，则调用函数应删除该对象
    */
    bool parseData(const QByteArray &dgram);
protected:
    WriteSession(TransferInfo T) : Session(T) {}

    /**
    * @brief 此函数由ServerWriteSession和ClientWriteSession用于
            将数据保存到本地文件，如果需要，可更改为正确的模式
    */
    void actualWriteBlock(char *data, uint32_t size);

    /**
    * @brief 发送ack确认，数据包格式如下：
        <pre>
              2 bytes    2 bytes
              --------------------
              ACK| 04 | Block #  |
              --------------------
        </pre>
    */
    void sendAck();
};

};

#endif
